1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package com.google.common.collect;
16
17 import static com.google.common.collect.BoundType.CLOSED;
18 import static com.google.common.collect.BoundType.OPEN;
19
20 import com.google.common.collect.testing.features.CollectionFeature;
21 import com.google.common.collect.testing.features.CollectionSize;
22 import com.google.common.collect.testing.google.SortedMultisetTestSuiteBuilder;
23 import com.google.common.collect.testing.google.TestStringMultisetGenerator;
24
25 import junit.framework.Test;
26 import junit.framework.TestSuite;
27
28 import java.util.Arrays;
29 import java.util.Collection;
30 import java.util.Iterator;
31 import java.util.List;
32 import java.util.NavigableSet;
33
34 import javax.annotation.Nullable;
35
36
37
38
39
40
41 public class ForwardingSortedMultisetTest extends ForwardingMultisetTest {
42 static class StandardImplForwardingSortedMultiset<E> extends ForwardingSortedMultiset<E> {
43 private final SortedMultiset<E> backingMultiset;
44
45 StandardImplForwardingSortedMultiset(SortedMultiset<E> backingMultiset) {
46 this.backingMultiset = backingMultiset;
47 }
48
49 @Override
50 protected SortedMultiset<E> delegate() {
51 return backingMultiset;
52 }
53
54 @Override
55 public SortedMultiset<E> descendingMultiset() {
56 return new StandardDescendingMultiset() {
57
58 @Override
59 Iterator<Entry<E>> entryIterator() {
60 return backingMultiset
61 .descendingMultiset()
62 .entrySet()
63 .iterator();
64 }
65 };
66 }
67
68 @Override
69 public NavigableSet<E> elementSet() {
70 return new StandardElementSet();
71 }
72
73 @Override
74 public Entry<E> firstEntry() {
75 return standardFirstEntry();
76 }
77
78 @Override
79 public Entry<E> lastEntry() {
80 return standardLastEntry();
81 }
82
83 @Override
84 public Entry<E> pollFirstEntry() {
85 return standardPollFirstEntry();
86 }
87
88 @Override
89 public Entry<E> pollLastEntry() {
90 return standardPollLastEntry();
91 }
92
93 @Override
94 public SortedMultiset<E> subMultiset(
95 E lowerBound, BoundType lowerBoundType, E upperBound, BoundType upperBoundType) {
96 return standardSubMultiset(lowerBound, lowerBoundType, upperBound, upperBoundType);
97 }
98
99 @Override
100 public int count(@Nullable Object element) {
101 return standardCount(element);
102 }
103
104 @Override
105 public boolean equals(@Nullable Object object) {
106 return standardEquals(object);
107 }
108
109 @Override
110 public int hashCode() {
111 return standardHashCode();
112 }
113
114 @Override
115 public boolean add(E element) {
116 return standardAdd(element);
117 }
118
119 @Override
120 public boolean addAll(Collection<? extends E> collection) {
121 return standardAddAll(collection);
122 }
123
124 @Override
125 public void clear() {
126 standardClear();
127 }
128
129 @Override
130 public boolean contains(@Nullable Object object) {
131 return standardContains(object);
132 }
133
134 @Override
135 public boolean containsAll(Collection<?> collection) {
136 return standardContainsAll(collection);
137 }
138
139 @Override
140 public boolean isEmpty() {
141 return standardIsEmpty();
142 }
143
144 @Override
145 public Iterator<E> iterator() {
146 return standardIterator();
147 }
148
149 @Override
150 public boolean remove(@Nullable Object object) {
151 return standardRemove(object);
152 }
153
154 @Override
155 public boolean removeAll(Collection<?> collection) {
156 return standardRemoveAll(collection);
157 }
158
159 @Override
160 public boolean retainAll(Collection<?> collection) {
161 return standardRetainAll(collection);
162 }
163
164 @Override
165 public int size() {
166 return standardSize();
167 }
168
169 @Override
170 public Object[] toArray() {
171 return standardToArray();
172 }
173
174 @Override
175 public <T> T[] toArray(T[] array) {
176 return standardToArray(array);
177 }
178 }
179
180 public static Test suite() {
181 TestSuite suite = new TestSuite();
182
183 suite.addTestSuite(ForwardingSortedMultisetTest.class);
184 suite.addTest(SortedMultisetTestSuiteBuilder
185 .using(new TestStringMultisetGenerator() {
186 @Override
187 protected Multiset<String> create(String[] elements) {
188 return new StandardImplForwardingSortedMultiset<String>(
189 TreeMultiset.create(Arrays.asList(elements)));
190 }
191
192 @Override
193 public List<String> order(List<String> insertionOrder) {
194 return Ordering.natural().sortedCopy(insertionOrder);
195 }
196 })
197 .named("ForwardingSortedMultiset with standard impls")
198 .withFeatures(
199 CollectionSize.ANY, CollectionFeature.KNOWN_ORDER, CollectionFeature.GENERAL_PURPOSE,
200 CollectionFeature.ALLOWS_NULL_QUERIES)
201 .createTestSuite());
202
203 return suite;
204 }
205
206 @Override
207 public void setUp() throws Exception {
208 super.setUp();
209
210
211
212
213 @SuppressWarnings("unchecked")
214 final SortedMultiset<String> sortedMultiset = createProxyInstance(SortedMultiset.class);
215 forward = new ForwardingSortedMultiset<String>() {
216 @Override
217 protected SortedMultiset<String> delegate() {
218 return sortedMultiset;
219 }
220 };
221 }
222
223 public void testComparator() {
224 forward().comparator();
225 assertEquals("[comparator]", getCalls());
226 }
227
228 public void testFirstEntry() {
229 forward().firstEntry();
230 assertEquals("[firstEntry]", getCalls());
231 }
232
233 public void testLastEntry() {
234 forward().lastEntry();
235 assertEquals("[lastEntry]", getCalls());
236 }
237
238 public void testPollFirstEntry() {
239 forward().pollFirstEntry();
240 assertEquals("[pollFirstEntry]", getCalls());
241 }
242
243 public void testPollLastEntry() {
244 forward().pollLastEntry();
245 assertEquals("[pollLastEntry]", getCalls());
246 }
247
248 public void testDescendingMultiset() {
249 forward().descendingMultiset();
250 assertEquals("[descendingMultiset]", getCalls());
251 }
252
253 public void testHeadMultiset() {
254 forward().headMultiset("abcd", CLOSED);
255 assertEquals("[headMultiset(Object,BoundType)]", getCalls());
256 }
257
258 public void testSubMultiset() {
259 forward().subMultiset("abcd", CLOSED, "dcba", OPEN);
260 assertEquals("[subMultiset(Object,BoundType,Object,BoundType)]", getCalls());
261 }
262
263 public void testTailMultiset() {
264 forward().tailMultiset("last", OPEN);
265 assertEquals("[tailMultiset(Object,BoundType)]", getCalls());
266 }
267
268 @Override
269 protected SortedMultiset<String> forward() {
270 return (SortedMultiset<String>) super.forward();
271 }
272 }